<?php

namespace Lib\Core;

class ValidateCode extends \Home {

	private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHJKMNPRSTUVWXYZ23456789';    //随机因子
	private $code;                            //验证码
	public $codeLen = 5;                    //验证码长度
	public $width = 256;                    //宽度
	public $height = 62;                    //高度
	private $img;                                //图形资源句柄
	private $font;                                //指定的字体
	private $fontSize = 20;                //指定字体大小
	private $fontColor;                        //指定字体颜色

	/**
	 * 构造方法初始化
	 */
	public function __construct() {
		$this->font = __DIR__ . '/../Font/Elephant.ttf';
	}

	/**
	 * 对外生成
	 */
	public function create() {
		$this->createBg();
		$this->createCode();
		$this->createLine();
		$this->createFont();
		$this->outPut();
	}

    public function onlyCreate() {
        $this->createBg();
        $this->createCode();
        $this->createLine();
        $this->createFont();
    }

    /**
     * 输出
     */
    public function outPut() {
        header('Content-type:image/png');
        imagepng($this->img);
        imagedestroy($this->img);
    }

	/**
	 * 获取验证码.
	 *
	 * @return string
	 */
	public function getCode() {
		return $this->code;
	}

	/**
	 * 生成随机码
	 */
	private function createCode() {
		$len = mb_strlen($this->charset) - 1;
		for ($i = 0; $i < $this->codeLen; $i++) {
			$this->code .= mb_substr($this->charset, mt_rand(0, $len), 1);
		}
	}

	/**
	 * 生成背景
	 */
	private function createBg() {
		$this->img = imagecreatetruecolor($this->width, $this->height);
		$color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
		imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color);
	}

	/**
	 * 生成文字
	 */
	private function createFont() {
		$_x = $this->width / $this->codeLen;
		for ($i = 0; $i < $this->codeLen; $i++) {
			$this->fontColor = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
			imagettftext($this->img, $this->fontSize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $this->fontColor, $this->font, $this->code[$i]);
		}
	}

	/**
	 * 生成线条、雪花
	 */
	private function createLine() {
		for ($i = 0; $i < 6; $i++) {
			$color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
			imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
		}
		for ($i = 0; $i < 100; $i++) {
			$color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
			imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
		}
	}


}